package com.readpost.anno;


import com.readpost.validation.StateValidation;
import jakarta.validation.Constraint;
import jakarta.validation.Payload;

import static java.lang.annotation.ElementType.*;

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

@Documented         //元注解，用于指定该注解包含在Javadoc中
@Target({FIELD})    //元注解，用于指定该注解可以应用于哪些元素上，FIELD表示该注解可以应用于字段上
@Retention(RUNTIME) //元注解，用于指定该注解的保留策略，RUNTIME表示该注解在运行时可见
@Constraint(validatedBy = {StateValidation.class})  //元注解，用于指定该注解的验证器类
/*
  自定义注解，用于验证状态值是否为draft或published
 */
public @interface State {

    /**
     * 用于指定验证组
     * @return Class数组，默认为空数组
     */
    Class<?>[] groups() default {};

    /**
     * 用于指定错误消息的负载
     * @return Payload数组，默认为空数组
     */
    Class<? extends Payload>[] payload() default {};

    // 定义一个名为value的属性，用于指定默认值为draft
    String value() default "draft";

    // 定义一个名为message的属性，用于指定错误消息
    String message() default "状态值只能是draft或published";
}
